package proyectoX.src.fabricas;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.entidades.Principal;



/**
 * Utilizando el patrón de diseño abstract factory esta clase abstracta declara la interfaz que
 * se utilizará para crear naves principales al iniciar el juego (debería haber una fábrica concreta por
 * nave con la que se puede jugar). Esta clase será utilizada para obtener los íconos para la interfaz gráfica
 * y crear la nave con la que se jugará además de proporcionar los íconos para los powerups.
 *
 */
public abstract class AbstractFactoryNaves {

	/**
	 * Constructor default.
	 */
	protected AbstractFactoryNaves() {
		
	}
	
	/**
	 * Crea la nave jugadora con los datos suministrados por parámetro.
	 * @param x Posición x.
	 * @param y Posicion y.
	 * @param nivel Nivel Actual
	 * @return Nave jugadora utilizada.
	 */
	public abstract Principal crearNavePrincipal(int x, int y, Nivel nivel);
	
	/**
	 * Crea el ícono de la habilidad para la nave jugadora.
	 * @param x Posición x.
	 * @param y Posición y.
	 * @return Devuelve el JLabel con el ícono.
	 */
	public abstract JLabel crearIconoHabilidad(int x, int y);
	
	/**
	 * Crea el ícono del láser para la nave jugadora.
	 * @param x Posición x.
	 * @param y Posición y.
	 * @return Devuelve el JLabel con el ícono.
	 */
	public abstract JLabel crearIconoLaser(int x, int y);
	
	/**
	 * Crea el ícono del arma secundario para la nave jugadora.
	 * @param x Posición x.
	 * @param y Posición y.
	 * @return Devuelve el JLabel con el ícono.
	 */
	public abstract JLabel crearIconoArma(int x, int y);
	
	/**
	 * Crea el ícono grande de la nave jugadora.
	 * @param x Posición x.
	 * @param y Posición y.
	 * @return Devuelve el JLabel con el ícono.
	 */
	public abstract JLabel crearIconoNave(int x, int y);
	
	/**
	 * Crea el ícono de la vida para la nave jugadora.
	 * @param x Posición x.
	 * @param y Posición y.
	 * @return Devuelve el JLabel con el ícono.
	 */
	public abstract JLabel crearIconoVida(int x, int y);
	
	/**
	 * Crea el ícono de la Bomba Devastadora.
	 * @param x Posición x.
	 * @param y Posición y.
	 * @return Devuelve el JLabel con el ícono.
	 */
	public JLabel crearIconoBombaDevastadora(int x, int y) {
		ImageIcon imagen = new ImageIcon(this.getClass().getResource("/proyectoX/sprites/icons/bomba_devastadora.png"));
		JLabel resultado = new JLabel(imagen);
		resultado.setBounds(x, y, imagen.getIconWidth(), imagen.getIconHeight());
		resultado.setVisible(true);
		return resultado;
	}
	
	/**
	 * Crea el ícono para el powerup de los puntos de vida.
	 * @param x Posición x.
	 * @param y Posición y.
	 * @return Devuelve el JLabel con el ícono.
	 */
	public JLabel crearIconoPwrPuntosDeVida(int x, int y) {
		ImageIcon imagen = new ImageIcon(this.getClass().getResource("/proyectoX/sprites/icons/pwr_hp.png"));
		JLabel resultado = new JLabel(imagen);
		resultado.setBounds(x, y, imagen.getIconWidth(), imagen.getIconHeight());
		resultado.setVisible(true);
		return resultado;
	}

	/**
	 * Crea el ícono para el powerup de la barrera eléctrica.
	 * @param x Posición x.
	 * @param y Posición y.
	 * @return Devuelve el JLabel con el ícono.
	 */
	public JLabel crearIconoBarra(int x, int y) {
		ImageIcon imagen = new ImageIcon(this.getClass().getResource("/proyectoX/sprites/icons/pwr_barra.png"));
		JLabel resultado = new JLabel(imagen);
		resultado.setBounds(x, y, imagen.getIconWidth(), imagen.getIconHeight());
		resultado.setVisible(true);
		return resultado;
	}
}
